Mem5.c中,使用了21个函数,2种结构体来完成内存分配工作。各部分功能列表如下。
表4.4.1 结构体功能列表
编号 | 结构体名称 | 功能 |
---|---|---|
1 | Mem5Link | 构成chunk双向链表 |
2 | Mem5Global | 用于存储mem5.c中的静态变量及其性能统计信息 |
表4.4.2 mem5.c函数功能列表
编号 | 函数名 | 功能 |
---|---|---|
1 | static void memsys5Unlink(int i, int iLogsize) | 从双向循环链表中删除第i项chunk,该chunk位于mem5.aiFreelist[iLogsize]处 |
2 | static void memsys5Link(int i, int iLogsize) | 将 mem5.aPool[i] 位置的chunk, 插入到空闲链表mem5.aiFreelist[iLogsize]处 |
3 | static void memsys5Enter(void) | 对该内存分配器加互斥锁 |
4 | static void memsys5Leave | 解锁 |
5 | static int memsys5Size(void *p) | 返回一个以字节为单位的未分配的内存大小 |
6 | static int memsys5UnlinkFirst(int iLogsize) | 找到空闲链表中的第iLogSize项指向的链表中下标最小的那一项,返回这个下标 |
7 | static void *memsys5MallocUnsafe(int nByte) | 给用户分配n字节的空间,返回该空间的地址。 |
8 | static void memsys5FreeUnsafe(void *pOld) | 释放未分配内存,由pOld指针指向的zPool与szAtom的比值,得到要释放的内存块下标 |
9 | static void *memsys5Malloc(int nBytes) | 申请分配n字节的内存空间。 |
10 | static void memsys5Free(void *pPrior) | 释放*pPrior指向的内存空间。 |
11 | static void memsys5Realloc(void pPrior, int nBytes) | 重新分配*pPrior指向的内存空间大小为n字节。 |
12 | static int memsys5Roundup(int n) | 计算当前请求到下一个有效分配的大小。 |
13 | static int memsys5Log(int iValue) | 返回最接近iValue的2的幂 |
14 | static int memsys5Init(void *NotUsed) | 初始化该内存分配器。 |
15 | static void memsys5Shutdown(void *NotUsed) | 取消模块初始化设置。 |
16 | void sqlite3Memsys5Dump(const char *zFilename) | 将该内存分配器进行的操作写入日志文件。 |
17 | const sqlite3_mem_methods *sqlite3MemGetMemsys5(void) | 重新分配*pPrior指向的内存空间大小为n字节。 |
18 | int memsys3Init(void *NotUsed) | 初始化该内存分配器。 |
19 | void memsys3Shutdown(void *NotUsed) | 取消模块初始化设置。 |
20 | void sqlite3Memsys3Dump(const char *zFilename) | 将该内存分配器进行的操作写入日志文件。 |
21 | const sqlite3_mem_methods *sqlite3MemGetMemsys3(void) | 用于与外部链接。 |